package com.ethink.warehouse.api;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ethink.warehouse.api.info.MateInventoryTypeChangeLogInfo;
import com.ethink.warehouse.api.info.MateInventoryTypeChangeLogModeInfo;
import com.ethink.warehouse.api.request.MateInventoryTypeChangeLogAddRequest;
import com.ethink.warehouse.api.request.MateInventoryTypeChangeLogQueryModeRequest;
import com.ethink.warehouse.api.request.MateInventoryTypeChangeLogQueryRequest;
import com.ethink.warehouse.api.request.MateInventoryTypeChangeLogUpdateRequest;
import com.ethink.warehouse.api.response.MateInventoryTypeChangeLogAddResponse;
import com.ethink.warehouse.api.response.MateInventoryTypeChangeLogDeleteResponse;
import com.ethink.warehouse.api.response.MateInventoryTypeChangeLogGetDetailResponse;
import com.ethink.warehouse.api.response.MateInventoryTypeChangeLogUpdateResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * 库存状态变更 Facade接口
 *
 * @author default
 * @date 2023-01-14
 */
@FeignClient(name = "ethink-warehouse-service", path = "warehouse-service/facade/v1/mateInventoryTypeChangeLog", contextId = "mateInventoryTypeChangeLogFacade")
public interface MateInventoryTypeChangeLogFacade {

    @PostMapping("/queryMateInventoryTypeChangeLog")
    @ResponseBody
    Page<MateInventoryTypeChangeLogInfo> queryMateInventoryTypeChangeLog(@RequestBody MateInventoryTypeChangeLogQueryRequest request);

    @PostMapping("/getMateInventoryTypeChangeLogById")
    @ResponseBody
    MateInventoryTypeChangeLogGetDetailResponse getMateInventoryTypeChangeLogById(@RequestParam("mateInventoryTypeChangeLogId") Long mateInventoryTypeChangeLogId);

    @PostMapping("/listMateInventoryTypeChangeLog")
    @ResponseBody
    List<MateInventoryTypeChangeLogInfo> listMateInventoryTypeChangeLog(@RequestBody MateInventoryTypeChangeLogQueryRequest request);

    @PostMapping("/addMateInventoryTypeChangeLog")
    @ResponseBody
    MateInventoryTypeChangeLogAddResponse addMateInventoryTypeChangeLog(@RequestBody MateInventoryTypeChangeLogAddRequest request);

    @PostMapping("/updateMateInventoryTypeChangeLog")
    @ResponseBody
    MateInventoryTypeChangeLogUpdateResponse updateMateInventoryTypeChangeLog(@RequestBody MateInventoryTypeChangeLogUpdateRequest request);

    @PostMapping("/deleteMateInventoryTypeChangeLog")
    @ResponseBody
    MateInventoryTypeChangeLogDeleteResponse deleteMateInventoryTypeChangeLog(@RequestParam("mateInventoryTypeChangeLogId") Long mateInventoryTypeChangeLogId);

    @PostMapping("/approvedMateInventoryTypeChangeLog")
    @ResponseBody
    void approvedMateInventoryTypeChangeLog(@RequestParam("id") Long id);

    @PostMapping("/refuseMateInventoryTypeChangeLog")
    @ResponseBody
    void refuseMateInventoryTypeChangeLog(@RequestParam("id") Long id);

    @PostMapping("/queryMateInventoryTypeChangeLogMode")
    @ResponseBody
    Page<MateInventoryTypeChangeLogModeInfo> queryMateInventoryTypeChangeLogMode(@RequestBody MateInventoryTypeChangeLogQueryModeRequest request);

}